/**
 * 常用的 dialog 能力封装
 * 简化传参或增强实现，参数基本与标准 API 一致。若存在差异，会在当前方法中说明。
 * 参考文档：https://uniapp.dcloud.io/api/ui/prompt
 */
import { isStr } from './util'
const DIALOG_DURATION = 1500
function logError() {
  console.error(...arguments)
}
/**
 * showToast
 * @param {Object | String} options 支持 String 类型，即 options.title 的值。
 */
export function showToast(options) {
  if (isStr(options)) {
    options = {
      title: options,
    }
  }
  if (options && !options.title) {
    return logError('@dialog', 'showToast title 不能为空')
  }
  options = {
    icon: 'none',
    duration: DIALOG_DURATION,
    mask: false,
    ...options,
  }
  uni.showToast(options)
}
/**
 * showLoading
 * @param {Object | String} options 支持 String 类型，即 options.title 的值。
 * @param {Boolean} options.autoClose 是否自动关闭 loading 提示框 | 默认为 true
 * @param {Number} options.duration 提示框的持续时间，仅在 options.autoClose 为 true 时生效，单位 ms。| 默认为 DIALOG_DURATION
 */
export function showLoading(options) {
  if (isStr(options)) {
    options = {
      title: options,
    }
  }
  if (!options.title) {
    return logError('@dialog', 'showLoading title 不能为空')
  }
  options = {
    mask: true,
    autoClose: true,
    duration: DIALOG_DURATION,
    ...options,
  }

  uni.showLoading(options)

  if (options.autoClose) {
    setTimeout(() => {
      uni.hideLoading()
    }, options.duration)
  }
}
// hideLoading
export function hideLoading() {
  uni.hideLoading()
}
export function hideToast() {
  uni.hideToast()
}
const modalTypes = {
  default: '#3cc51f',
  info: '#1989fa',
  warn: '#ff976a',
  danger: '#ee0a24',
}

/**
 * showModal
 * @param {Object} options 参数与标准规范一致
 */
export function showModal(options) {
  const type = options.type || 'default'
  options = {
    title: '提示',
    showCancel: true,
    cancelText: '取消',
    cancelColor: '#000000',
    confirmText: '确定',
    confirmColor: modalTypes[type] || modalTypes['default'],
    ...options,
  }

  return uni.showModal(options)
}
